package com.hqq.exercise.array;

import com.hqq.exercise.sort_search.Sort;

/**
 * PokerSequence 扑克牌的顺子
 * 题目描述:
 * 从扑克牌中随机抽5张牌，判断是不是顺子，
 * 即这5张牌是不是连续的。2-10为数字本身，A为1，J为11，Q为12，K为13，而大小王可以看成任意的数字。
 * ps：大小王看成0
 * 【思路】
 * 1) 对数组进行排序  2) 统计0的个数 3)统计相邻元素之间的空缺总数
 * 如果空缺总数小于等于0的个数 --> 连续
 * 如果空缺总数大于0的个数 --> 非连续
 * 如果数组中存在连续的元素 --> 非连续
 * Created by heqianqian on 2017/8/23.
 */
public class PokerSequence {

    public static boolean isSuccession(int[] array) {
        if (array == null || array.length == 0) {
            return false;
        }
        //1.对数组排序
        Sort.quickSort(array);
        //2.统计0的个数
        int numOfZero = 0;
        for (int i = 0; i < array.length && array[i] == 0; i++) {
            numOfZero++;
        }
        int numOfGap = 0;
        int small = numOfZero;
        int big = numOfZero + 1;
        while (big < array.length) {
            if (array[small] == array[big]) {//数组中出现两个相同的元素
                return false;
            }
            numOfGap += array[big] - array[small] - 1;//统计间隔数
            small = big;
            big++;
        }
        return numOfGap <= numOfZero;
    }

}
